import { createApp } from './app'

export default context => {
  // 由于可能存在异步路由钩子或组件，因此我们将返回一个 Promise，以便服务器在渲染之前等待一切准备就绪。
  return new Promise((resolve, reject) => {
    const { app, router } = createApp()

    // 设置服务器端路由的位置
    router.push(context.url)

    // 等待路由解析可能的异步组件和钩子
    router.onReady(() => {
      const matchedComponents = router.getMatchedComponents()
      // 没有匹配的路由，拒绝并返回 404
      if (!matchedComponents.length) {
        return reject({ code: 404 })
      }

      // Promise 应该解析为应用程序实例，以便进行渲染
      resolve(app)
    }, reject)
  })
}
